using UnityEngine;
using System.Collections;
using System;

namespace CFE
{
    public class Base : MonoBehaviour{
		protected enum Race{None,Humans,Orks,Elfs};//Рассы, перечисление 
		public int Hp;//текущее здоровье (временно паблик)
        private int Arm;//броня
        private int MaxHp;//Максимально значение здоровь
		private float regeneration_timer;// текущее значение таймера атаки
		public Transform Pos;//координаты положения объекта
		public int Aliance;//характеризует принадлежность юнита к Фракции
		public bool IsBuilding=false;//здание, али не здание
		
		//Инициализация объекта
   		public void initialize(int _MaxHp,int _Arm)
		{
			//Инициализация полей
			Arm=_Arm;
			MaxHp=_MaxHp;
			Hp=MaxHp;
			regeneration_timer=0;
			Pos=transform;
            GlobalVars gv = GameObject.FindGameObjectWithTag("GlobalVars").GetComponent<GlobalVars>();
			if(Aliance==1)
			{
				gv.Aliance1.Add(this);
				gv.Aliance1_count++;				
			}
			else if(Aliance==2)
			{
				gv.Aliance2.Add(this);
				gv.Aliance2_count++;				
			}
		}
		
		//Восстановление здоровья
        public void Regen()
        {
			if(regeneration_timer>0) regeneration_timer-=Time.deltaTime;
					if(regeneration_timer<0) regeneration_timer=0;
					if(regeneration_timer==0)
					{
	            		if(Hp>0 && Hp<MaxHp)
						{
			                Hp++;
			            }
						regeneration_timer=1;
					}
            
        }
		
		//Потеря здоровья
        public void LoseHp(int Dmg)//mode=1 атака,mode=0 ремонт (ремонт — это атака с отрицательным значением наносимого урона)
		{
            Hp -= Convert.ToInt32(Dmg-Dmg*Arm*0.05); // Вычитаем из имеющегося ХП дамаг c расчетом дефа, возвращаем ХП , 1 единица брони - 5% защиты
            if (Hp <= 0) TheEnd();
        } 
		
		
	private void TheEnd()
	{
		GlobalVars gv=GameObject.FindGameObjectWithTag("GlobalVars").GetComponent<GlobalVars>();
		//Вычищаем себя из глобального списка объектов
		if(Aliance==1)
		{
			gv.Aliance1.Remove(this);
			gv.Aliance1_count--;				
		}
		else if(Aliance==2)
		{
			gv.Aliance2.Remove(this);
			gv.Aliance2_count--;				
		} 
		//самоуничтожаемся
		Destroy(gameObject);		
	}
    }    
}
